package org.lq.shopping.dao.impl;

import java.math.BigDecimal;
import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import org.apache.log4j.Logger;
import org.lq.shopping.dao.ShopGoodstypeDao;
import org.lq.shopping.entity.ShopGoodstype;
import org.lq.shopping.util.DruidUtil;
/**
 * 商品类型接口实现
 * @author 张平平
 * @时间  2018年9月26日
 */
public class ShopGoodstypeDaoImpl implements ShopGoodstypeDao {
	Logger log = Logger.getLogger(ShopGoodstypeDaoImpl.class);
	QueryRunner qr = new QueryRunner(DruidUtil.getDataSource());
	
	@Override
	public int add(ShopGoodstype t) {
		log.info("这是一个添加商品类型的操作");
		String sql = "insert into shop_goodstype(goodstype_id, goodstype_name, parent_id) values(goodstype_seq.nextval, ?, ?)";
		log.debug("传入:"+t.toString());
		log.debug("SQL:"+sql);
		int num = 0;
		try {
			num = qr.execute(sql, t.getGoodstype_name(),t.getParent_id());
		} catch (SQLException e) {
			log.error("这是一个商品类型添加异常信息");
		}
		return num;
	}

	@Override
	public int delete(int id) {
		log.info("这是一个删除商品类型的操作");
		String sql = "delete from shop_goodstype where goodstype_id = ?";
		log.debug("传入:"+id);
		log.debug("SQL:"+sql);
		int num = 0;
		try {
			num = qr.execute(sql, id);
		} catch (SQLException e) {
			log.error("这是一个商品类型删除异常信息");
		}
		return num;
	}

	@Override
	public int update(ShopGoodstype t) {
		log.info("这是一个修改商品类型的操作");
		String sql = "update shop_goodstype set goodstype_name = ?, parent_id = ? where goodstype_id = ?;";
		log.debug("传入:"+t.toString());
		log.debug("SQL:"+sql);
		int num = 0;
		try {
			num = qr.execute(sql, t.getGoodstype_name(),t.getParent_id(),t.getGoodstype_id());
		} catch (SQLException e) {
			log.error("这是一个商品类型修改异常信息");
		}
		return num;
	}

	


	@Override
	public List<ShopGoodstype> findAll() {
		log.info("这是一个查询全部商品类型的操作");
		String sql = "select * from shop_goodstype";
		log.debug("SQL:"+sql);
		List<ShopGoodstype> list = null;
		try {
			list = qr.query(sql, new BeanListHandler<ShopGoodstype>(ShopGoodstype.class));
		} catch (SQLException e) {
			log.error("这是一个查询全部商品类型的异常");
		}
		return list;
	}

	@Override
	public ShopGoodstype findById(int id) {
		log.info("这是一个根据ID查询商品类型的操作");
		String sql = "select * from shop_goodstype";
		log.debug("传入:"+id);
		log.debug("SQL:"+sql);
		ShopGoodstype shopGoodstype = null;
		try {
			shopGoodstype = qr.query(sql, new BeanHandler<ShopGoodstype>(ShopGoodstype.class),id);
		} catch (SQLException e) {
			log.error("这是一个查询全部商品类型的异常");
		}
		return shopGoodstype;
	}
	
	@Override
	public List<ShopGoodstype> LikeColumnByValue(String columName, Object value) {
		log.info("这是一个根据指定的列名进行模糊查询的操作");
		String sql = "select * from shop_goodstype where ? like ?";
		log.debug("传入:"+columName+"--"+value);
		log.debug("SQL:"+sql);
		List<ShopGoodstype> list = null;
		try {
			list = qr.query(sql, new BeanListHandler<>(ShopGoodstype.class),columName,"%"+value+"%");
		} catch (SQLException e) {
			log.error("这是一个根据指定的列名进行模糊查询的异常");
		}
		return list;
	}

	@Override
	public int getCount() {
		log.info("这是一个获取商品类型总行数的操作");
		String sql = "select count(1) from shop_goodstype";
		log.debug("SQL:"+sql);
		int num = 0;
		try {
			num = qr.query(sql, new ScalarHandler<BigDecimal>()).intValue();
		} catch (SQLException e) {
			log.error("这是一个获取商品类型总行数的异常");
		}
		return num;
	}

	@Override
	public List<ShopGoodstype> findPage(int pageIndex, int pageSize) {
		log.info("这是一个分页商品类型的操作");
		String sql = "select * from" + 
				"( select rownum r,s.* from " + 
				"( select * from shop_goodstype order by goodstype_id ) " + 
				"s where rownum <= ? )" + 
				"where r > ?";
		log.debug("传入:pageIndex"+pageIndex+"pageSize:"+pageSize);
		log.debug("SQL:"+sql);
		List<ShopGoodstype> list = null;
		int max = pageIndex*pageSize;
		int min = (pageIndex-1)*pageSize;
		try {
			list = qr.query(sql, new BeanListHandler<ShopGoodstype>(ShopGoodstype.class),max,min);
		} catch (SQLException e) {
			log.error("这是一个分页商品类型的异常");
		}
		return list;
	}
	
	@Override
	public List<ShopGoodstype> findShopGoodstypebyParentid(int parentId) {
		log.info("这是一个根据父查询子商品类型的操作");
		String sql = "select * from shop_goodstype where parent_id = ?";
		log.debug("传入："+parentId);
		log.debug("SQL:"+sql);
		List<ShopGoodstype> list = null;
		try {
			list = qr.query(sql, new BeanListHandler<>(ShopGoodstype.class),parentId);
		} catch (SQLException e) {
			log.error("这是一个商品类型查询异常信息");
		}
		return list;
	}

	@Override
	public ShopGoodstype getShopGoodsbychildId(int goodstypeid) {
		log.info("这是一个根据子判断父类型商品类型的操作");
		String sql = "select * from shop_goodstype where goodstype_id = (select parent_id from shop_goodstype where goodstype_id = ?)";
		log.debug("传入："+goodstypeid);
		log.debug("SQL:"+sql);
		ShopGoodstype sgt = null;
		try {
			sgt = qr.query(sql, new BeanHandler<>(ShopGoodstype.class),goodstypeid);
		} catch (SQLException e) {
			log.error("这是一个商品类型查询异常信息");
		}
		return sgt;
	}
}
